package com.LeeCode;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * 找出最长等值子数组
 */

public class Code2831 {
    public static void main(String[] args) {

    }

    // 分组滑动窗口
    public int longestEqualSubarray(List<Integer> nums, int k) {
        HashMap<Integer, List<Integer>> map = new HashMap<>();

        for (int i = 0; i < nums.size(); i++) {
            if (!map.containsKey(nums.get(i))) {
                map.put(nums.get(i), new ArrayList<>());
            }
            map.get(nums.get(i)).add(i - map.get(nums.get(i)).size());
        }

        int ans = 0;
        for (List<Integer> list : map.values()) {
            if(list.size() <= ans) continue;
            int left = 0;
            for (int i = 0; i < list.size(); i++) {

                while (list.get(i) - list.get(left) > k) {
                    left++;
                }
                ans = Math.max(ans, i - left + 1);
            }
        }

        return ans;
    }
}
